﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//二维数组

//int main()
//{
//	int arr[3][4] = { 0 };
//	int sz1 = sizeof(arr) / sizeof(arr[0]);//计算行数
//	int sz2=  sizeof(arr[0]) / sizeof(arr[0][0]);//计算列数
//	printf("%d %d\n", sz1, sz2);
//
//	return 0;
//}

//int main()
//{
//	int arr[3][5] = { 0 };
//	//打印每个元素的地址
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
//		}
//	}
//	return 0;
//}

//⼆维数组中的每个元素都是连续存放

//变长数组写在redpandaC++文件夹里

//数组练习

//练习1：多个字符从两端移动，向中间汇聚

#include <string.h>//strlen
#include <windows.h>//Sleep
#include <stdlib.h>//system

//int main()
//{
//	char arr1[] = "welcome to bite!!!!!!!";
//	char arr2[] = "**********************";
//	int left = 0;
//	int right = (int)strlen(arr1)-1;
//	while (left <= right)
//	{
//		arr2[left] = arr1[left];
//		arr2[right] = arr1[right];
//		printf("%s\n", arr2);
//		Sleep(25);//单位是毫秒
//		system("cls");//清理屏幕
//		left++;
//		right--;
//	}
//	printf("%s\n", arr2);
//
//	return 0;
//}

//练习2：⼆分查找
//在有序的数组中查找某个数，就可以使用二分查找（折半查找）
 
//int main()
//{
//	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
//	int left = 0;
//	int right = sizeof(arr) / sizeof(arr[0]) - 1;
//	int key = 7;
//	int mid = 0;
//	int flag = 0;
//	while (left <= right)
//	{
//		mid = left + (right - left) / 2;
//		if (arr[mid] < key)
//		{
//			left = mid + 1;
//		}
//		else if (arr[mid] > key)
//		{
//			right = mid - 1;
//		}
//		else
//		{
//			flag = 1;
//			break;
//		}
//	}
//	if (1 == flag)
//		printf("找到了，下标是%d\n", mid);
//	else
//		printf("找不到\n");
//
//	return 0;
//}

//函数

//库函数

//sqrt
//#include <math.h>
//int main()
//{
//	double ret = sqrt(100);
//	printf("%lf\n", ret);
//
//	return 0;
//}

//作业

//编写一个程序，从用户输入中读取10个整数并存储在一个数组中。然后，计算并输出这些整数的平均值。

//int main()
//{
//	int arr[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	float sum = 0;
//	for (i = 0; i < 10; i++)
//	{
//		sum += arr[i];
//	}
//	printf("%f\n", sum / 10);
//
//	return 0;
//}

//多组输入，一个整数（2~20），表示输出的行数，也表示组成“X”的反斜线和正斜线的长度。

//int main()
//{
//    int n = 0;
//    while (~scanf("%d", &n))
//    {
//        int i = 0;
//        int j = 0;
//        for (i = 0; i < n; i++)
//        {
//            for (j = 0; j < n; j++)
//            {
//                if (i == j || i + j == n - 1)
//                {
//                    printf("*");
//                }
//                else
//                {
//                    printf(" ");
//                }
//            }
//            printf("\n");
//        }
//    }
//    return 0;
//}

//输入描述：
//多组输入，一个整数（3~20），表示输出的行数，也表示组成正方形边的“ * ”的数量。
//输出描述：
//针对每行输入，输出用“ * ”组成的“空心”正方形，每个“ * ”后面有一个空格。

//int main()
//{
//    int a = 0;
//    while (scanf("%d", &a) != EOF)
//    {
//        int i = 0;
//        int j = 0;
//        for (i = 0; i < a; i++)
//        {
//            for (j = 0; j < a; j++)
//            {
//                if ((i == 0 || i == a - 1) || (j == 0 || j == a - 1))
//                {
//                    printf("* ");
//                }
//                else
//                {
//                    printf("  ");
//                }
//            }
//            printf("\n");
//        }
//    }
//    return 0;
//}


//输入描述：
//第一行包含两个整数n和m，表示一个矩阵包含n行m列，用空格分隔。(1≤n≤10, 1≤m≤10)
//从2到n + 1行，每行输入m个整数（范围 - 231~231 - 1），用空格分隔，共输入n * m个数，表示第一个矩阵中的元素。
//输出描述：
//输出m行n列，为矩阵转置后的结果。每个数后面有一个空格。

//int main()
//{
//    int a, b;
//    while (scanf("%d %d", &a, &b) != EOF)
//    {
//        int arr[a][b];
//        int i = 0;
//        int j = 0;
//        for (i = 0; i < a; i++)//2
//        {
//            for (j = 0; j < b; j++)//3
//            {
//                scanf("%d", &arr[i][j]);
//            }
//        }
//        for (i = 0; i < b; i++)//3
//        {
//            for (j = 0; j < a; j++)//2
//            {
//                printf("%d ", arr[j][i]);
//            }
//            printf("\n");
//        }
//    }
//    return 0;
//}

//输入描述：
//一行，输入10个整数，用空格分隔。
//输出描述：
//一行，逆序输出输入的10个整数，用空格分隔。

//int main()
//{
//    int arr[10] = { 0 };
//    int i = 0;
//    for (i = 0; i < 10; i++)
//    {
//        scanf("%d", &arr[i]);
//    }
//    for (i = 9; i >= 0; i--)
//    {
//        printf("%d ", arr[i]);
//    }
//    return 0;
//}


//描述
//输入两个升序排列的序列，将两个序列合并为一个有序序列并输出。
//输入描述：
//输入包含三行，
//第一行包含两个正整数n, m，用空格分隔。n表示第二行第一个升序序列中数字的个数，m表示第三行第二个升序序列中数字的个数。
//第二行包含n个整数，用空格分隔。
//第三行包含m个整数，用空格分隔。
//输出描述：
//输出为一行，输出长度为n + m的升序序列，即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。

//int main()
//{
//    int m = 0;
//    int n = 0;
//    scanf("%d %d", &m, &n);
//    int arr1[m];
//    int arr2[n];
//    int arr3[m + n];
//    int i = 0;
//    for (i = 0; i < m; i++)
//        scanf("%d", &arr1[i]);
//    for (i = 0; i < n; i++)
//        scanf("%d", &arr2[i]);
//    for (i = 0; i < m + n; i++)  //合并数组1，2
//    {
//        if (i < m)
//            arr3[i] = arr1[i];
//        else
//            arr3[i] = arr2[i - m];
//    }
//    //冒泡排序
//    int j = 0;
//    int tem = 0;
//    for (i = 0; i < m + n - 1; i++)
//    {
//        int count = 0;
//        for (j = 0; j < m + n - 1 - i; j++)
//        {
//            if (arr3[j] > arr3[j + 1])
//            {
//                tem = arr3[j];
//                arr3[j] = arr3[j + 1];
//                arr3[j + 1] = tem;
//                count = 1;
//            }
//        }
//        if (count == 0)//如果有某一趟没有交换位置，则说明已经排好序，直接退出循环
//            break;
//    }
//    //输出数组3
//    for (i = 0; i < m + n; i++)
//    {
//        printf("%d ", arr3[i]);
//    }
//    return 0;
//}

//将数组A中的内容和数组B中的内容进行交换。（数组一样大）

//int main()
//{
//	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int b[10] = { 0 };
//	int tem = 0;
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		tem = a[i];
//		a[i] = b[i];
//		b[i] = tem;
//	}
//	printf("a[10]=");
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	printf("\nb[10]=");
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", b[i]);
//	}
//	printf("\n");
//
//	return 0;
//}